package domein;

import java.util.List;

import persistentie.RekeningMapper;

public class RekeningController {

	private RekeningMapper rekeningenlijst;
	private Rekening huidigeRekening;
	private Rekeninglijn huidigeRekeninglijn;
	
	public RekeningController(){
		rekeningenlijst = new RekeningMapper();
	}
	
	public String[][] getRekeningenLijst(){
		List<Rekening> rekeningenlijst = this.rekeningenlijst.getRekeningen();
		int n = rekeningenlijst.size();
		String[][] rekeningenarray = new String[n][3];
		for(int i=0;i<n;i++){
			rekeningenarray[i][0] = rekeningenlijst.get(i).getKlant().getNaam() + " " + rekeningenlijst.get(i).getKlant().getVoornaam();
			rekeningenarray[i][1] = ((Integer)rekeningenlijst.get(i).getId()).toString();
			rekeningenarray[i][2] = ((Integer)rekeningenlijst.get(i).getResource()).toString();
		}
		return rekeningenarray;
	}
	
	public String[][] getDetailLijnen (int rekeningId) throws NullPointerException {
		String[][] detailRekeningArray;
		try{
			List<Rekeninglijn> detailRekening = rekeningenlijst.getArtikelen(rekeningId);
			int n = detailRekening.size();
			detailRekeningArray = new String[n][4];
			for(int i=0;i<n;i++){
				detailRekeningArray[i][0] = String.format("%s",detailRekening.get(i).getArtikel().getOmschrijving());
				detailRekeningArray[i][1] = String.format("%s",detailRekening.get(i).getAantal());
				detailRekeningArray[i][2] = String.format("%s",detailRekening.get(i).getArtikel().getPrijs());
				detailRekeningArray[i][3] = String.format("%s",detailRekening.get(i).getArtikel().getId());
			}
		}
		catch(NullPointerException e){
			throw e;
		}
		return detailRekeningArray;
	}	

	public void addRekening(Klant klant) {
		this.setHuidigeRekening(this.rekeningenlijst.addRekening(new Rekening(klant)));
	}
	
	public void setHuidigeRekening(int rekeningID){
		try{
			this.setHuidigeRekening(this.rekeningenlijst.getRekening(rekeningID));
		}
		catch(Exception e){
			
		}
	}
	
	public void setHuidigeRekening(Rekening huidigeRekening){
		this.huidigeRekening = huidigeRekening;
	}

	public Rekening getHuidigeRekening(){
		return this.huidigeRekening;
	}
	
	public boolean isHuidigeRekeningSet(){
		return this.huidigeRekening == null ? false : true ;
	}

	public void setHuidigeRekeninglijn(int artikelId){
		//get from DB gegevens met: this.getHuidigeRekening & artikelID
	}
	
	public Rekeninglijn getHuidigeRekeninglijn(){
		return this.huidigeRekeninglijn;
	}
	
	public void addRekeningLijn(int artikelId) throws Exception{
		this.rekeningenlijst.addRekeningLijn(this.huidigeRekening, artikelId);
	}
	
	public void addRekeningLijn(int artikelId, int aantal) throws Exception{
		this.rekeningenlijst.addRekeningLijn(this.huidigeRekening, artikelId, aantal);
	}
	
	public void removeRekeningLijn(int artikelId) throws Exception{
		this.rekeningenlijst.removeRekeningLijn(this.huidigeRekening, artikelId);
	}
	
	public double getTeBetalenBedrag(){
		return this.rekeningenlijst.getTeBetalenBedrag(this.huidigeRekening);	
	}
	
	public void setRekeningBetaald(){
		this.rekeningenlijst.setRekeningBetaald(this.huidigeRekening);
	}
	
	public List<Rekeninglijn> getExtraRekeningLijnen(){
		return this.rekeningenlijst.getExtraLijnen(this.huidigeRekening);
	}
	
	public String[][] getExtraLijnen(){
		String[][] extraLijnenArray;
		try{
			List<Rekeninglijn> extraLijnen = this.rekeningenlijst.getExtraLijnen(this.huidigeRekening);
			int n = extraLijnen.size();
			extraLijnenArray = new String[n][2];
			for(int i=0;i<n;i++){
				extraLijnenArray[i][0] = String.format("%s",extraLijnen.get(i).getArtikel().getOmschrijving());
				extraLijnenArray[i][1] = String.format("%s",extraLijnen.get(i).getAantal());

			}
		}
		catch(NullPointerException e){
			throw e;
		}
		return extraLijnenArray;
	}
	
	public double dagopbrengst(){
		return this.rekeningenlijst.inkomsten(1);
	}
	
	public double dagverlies(){
		return this.rekeningenlijst.inkomsten(0);
	}
}